const axios = require('axios');

// 配置基础 URL
const BASE_URL = 'http://localhost:3000';

// 测试数据
const testPost = {
  title: '测试文章',
  slug: 'test-post-' + Date.now(),
  excerpt: '这是一个测试文章的摘要',
  content: '这是测试文章的内容，用于验证 API 功能是否正常工作。',
  status: 'draft',
  author: {
    id: 1,
    username: 'admin',
    nickname: '管理员'
  },
  authorId: 1,
  category: {
    id: 1,
    name: '技术'
  },
  categoryId: 1,
  tags: [
    { id: 1, name: 'NestJS' },
    { id: 2, name: 'TypeScript' }
  ],
  featuredImage: 'https://example.com/test-image.jpg',
  metaTitle: '测试文章 SEO 标题',
  metaDescription: '测试文章 SEO 描述'
};

async function testPostsAPI() {
  try {
    console.log('🚀 开始测试 Posts API...\n');

    // 1. 测试创建文章
    console.log('1. 测试创建文章...');
    const createResponse = await axios.post(`${BASE_URL}/posts`, testPost);
    const createdPost = createResponse.data.data;
    console.log('✅ 文章创建成功，ID:', createdPost.id);
    console.log('   标题:', createdPost.title);
    console.log('   状态:', createdPost.status);

    // 2. 测试获取文章列表
    console.log('\n2. 测试获取文章列表...');
    const listResponse = await axios.get(`${BASE_URL}/posts?page=1&limit=5`);
    const listData = listResponse.data.data;
    console.log('✅ 获取文章列表成功');
    console.log('   总数:', listData.total);
    console.log('   当前页文章数:', listData.posts.length);

    // 3. 测试根据 ID 获取文章
    console.log('\n3. 测试根据 ID 获取文章...');
    const getResponse = await axios.get(`${BASE_URL}/posts/${createdPost.id}`);
    const fetchedPost = getResponse.data.data;
    console.log('✅ 获取文章详情成功');
    console.log('   标题:', fetchedPost.title);
    console.log('   浏览次数:', fetchedPost.viewCount);

    // 4. 测试更新文章
    console.log('\n4. 测试更新文章...');
    const updateData = {
      title: '更新后的测试文章',
      status: 'published'
    };
    const updateResponse = await axios.patch(`${BASE_URL}/posts/${createdPost.id}`, updateData);
    const updatedPost = updateResponse.data.data;
    console.log('✅ 文章更新成功');
    console.log('   新标题:', updatedPost.title);
    console.log('   新状态:', updatedPost.status);
    console.log('   发布时间:', updatedPost.publishedAt);

    // 5. 测试发布文章
    console.log('\n5. 测试发布文章...');
    const publishResponse = await axios.patch(`${BASE_URL}/posts/${createdPost.id}/publish`);
    const publishedPost = publishResponse.data.data;
    console.log('✅ 文章发布成功');
    console.log('   状态:', publishedPost.status);

    // 6. 测试增加浏览次数
    console.log('\n6. 测试增加浏览次数...');
    await axios.patch(`${BASE_URL}/posts/${createdPost.id}/view`);
    const viewedPost = await axios.get(`${BASE_URL}/posts/${createdPost.id}`);
    console.log('✅ 浏览次数增加成功');
    console.log('   浏览次数:', viewedPost.data.data.viewCount);

    // 7. 测试点赞功能
    console.log('\n7. 测试点赞功能...');
    await axios.patch(`${BASE_URL}/posts/${createdPost.id}/like`);
    const likedPost = await axios.get(`${BASE_URL}/posts/${createdPost.id}`);
    console.log('✅ 点赞成功');
    console.log('   点赞次数:', likedPost.data.data.likeCount);

    // 8. 测试获取已发布文章
    console.log('\n8. 测试获取已发布文章...');
    const publishedResponse = await axios.get(`${BASE_URL}/posts/published?page=1&limit=5`);
    const publishedData = publishedResponse.data.data;
    console.log('✅ 获取已发布文章成功');
    console.log('   已发布文章数:', publishedData.posts.length);

    // 9. 测试批量操作
    console.log('\n9. 测试批量操作...');
    const batchResponse = await axios.post(`${BASE_URL}/admin/posts/batch`, {
      action: 'archive',
      postIds: [createdPost.id]
    });
    console.log('✅ 批量归档成功');
    console.log('   影响的文章数:', batchResponse.data.data.affected);

    // 10. 测试删除文章
    console.log('\n10. 测试删除文章...');
    await axios.delete(`${BASE_URL}/posts/${createdPost.id}`);
    console.log('✅ 文章删除成功');

    console.log('\n🎉 所有测试通过！Posts API 工作正常。');

  } catch (error) {
    console.error('❌ 测试失败:', error.response?.data || error.message);
    if (error.response?.data) {
      console.error('   错误详情:', JSON.stringify(error.response.data, null, 2));
    }
  }
}

// 运行测试
if (require.main === module) {
  testPostsAPI();
}

module.exports = { testPostsAPI };
